#include <iostream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<queue>
#include<set>
#include<functional>
#include<map>

using namespace std;
int main()
{
    // stack<double> stk;
    // stk.push(1.9);
    // stk.push(2.8);//压入一个数字（压栈）
    // cout<<stk.size()<<endl;
    // cout<<stk.empty()<<endl;
    // cout<<stk.top()<<endl;
    // stk.pop();//弹出一个数字
    // cout<<stk.top()<<endl;
    // vector<double> vec;
    // vec.push_back(1.0);
    // vec.push_back(1.4);
    //stack栈后进 (后)先出
    //queue队列先进先出
    // queue<int> que;
    // que.push(1);
    // que.push(2);
    // que.push(3);
    // cout<<que.front()<<endl;//队顶
    // cout<<que.back()<<endl;//队尾
    // que.pop();
    // cout<<que.front()<<endl;//队顶
    // cout<<que.back()<<endl;//队尾
    // que.pop();
    // cout<<que.front()<<endl;//队顶
    // cout<<que.back()<<endl;//队尾
    // cout<<que.size()<<endl;
    // cout<<que.empty()<<endl;
    priority_queue<int,vector<int>,greater<int>> pque;
    priority_queue<long long,vector<long long>,greater<long long>> pque2;

    //底层默认存储最值的容器为 vector
    //greater<int>为仿函数
    //优先队列（堆）
    //大顶堆(变为小顶堆)
    //尖括号里最多填三个类型

    // pque.push(1);
    // cout<<pque.top()<<endl;
    // pque.push(3);
    // cout<<pque.top()<<endl;
    // pque.push(2);
    // cout<<pque.top()<<endl;
    // pque.push(4);
    // cout<<pque.top()<<endl;
    // pque.pop();
    // cout<<pque.top()<<endl;
    // pque.pop();
    // cout<<pque.top()<<endl;
    // pque.pop();
    // cout<<pque.top()<<endl;
    // //注意事项
    // //1,仅堆顶可读
    // //2,堆中元素不可修改（除堆顶元素）
    // //（先弹后压）
    // int x = pque.top();
    // pque.pop();
    // pque.push(x+1);
    // cout<<pque.top()<<endl;
    set<int> st;
    st.insert(1);
    st.insert(2);
    st.insert(2);
    st.insert(0);
    //互异性，不能存入两个相同值
    //st.erase(2);
   cout<<*st.begin()<<endl;
    if(st.find(1)!=st.end())
    {
cout<<"yes"<<endl;
    }
    else
    {
        cout<<"no"<<endl;
    }
    if(st.count(1))//该段代码中count只会返回1或0的值
    {
        cout<<"yes"<<endl;
    }

     else
    {
        cout<<"no"<<endl;
    }
    cout<<st.size()<<endl;
    st.clear();//清空返回值类型为void
    cout<<st.empty()<<endl;


    
    for(auto &ele : st)
    {
        cout<<ele<<endl;
    }
    //set可遍历但无下标概念（st[i]）
 
    map<int,int> mp;
    
    mp[2] = 1;
    mp[2] = 3;//可修改
    mp[1]  =3;
    mp[0] = 4;
    mp[99999] = 66666;
    
    for(map<int,int>::iterator it = mp.begin();it !=mp.end();++it)
    {
        cout<<it->first<<" "<<it->second<<endl;

    }
    //遍历全部键
    for(auto&pr:mp)
    {
        cout<<pr.first<<' '<<pr.second<<endl;
    }
    //遍历全部键（c++11）
    for(auto&[key,val]:mp)
    {
        cout<<key<<' '<<val<<endl;
    }
    //遍历全部键(c++17)
    map<string,int> mp2;
    vector<string> word;
    word push_back("awa");
    word push_back("awa");
    word push_back("awa");
    word push_back("awa");
    word push_back("bvb");
    word push_back("bvb");
    for (int i = 0; i < mp2.size(); i++)
    {
        mp[word[i]]++;

    }
    
    for(auto &pr:mp2)
    {
        cout<<mp2.first<<' '<<mp2.second<<endl;
    }
    //遍历map中所有元素
    

    cout<<mp[2]<<endl;
    cout<<mp[3]<<endl;//访问map中没有的值，会默认赋值为0
    mp.erase(2);
    cout<<mp.count(2)<<endl;//找不到返回0找到返回1
    cout<<"8888888"<<endl;
    cout<<mp.size()<<endl;
    mp.clear();
    cout<<mp.empty()<<endl;
    if(mp.find(2)!=mp.end())
    {
        cout<<"yes"<<endl;
    }
    else
    {
        cout<<"no"<<endl;
    }



    return 0;
}